core: Ensure we abort transaction if we fail in the middle
authorColin Walters <walters@verbum.org>
Sat, 7 Jan 2012 16:11:51 +0000 (11:11 -0500)
committerColin Walters <walters@verbum.org>
Sat, 7 Jan 2012 16:11:51 +0000 (11:11 -0500)
Otherwise we could leave a lot of temp files lying around.

src/ostree/ot-builtin-commit.c
src/ostree/ot-builtin-compose.c

index 8b791189dd8f066f4f17989db33070a361bad326..be58f19541c8615d955ebe389ef06aff4c30f796 100644 (file)
@@ -81,6 +81,7 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GError **error)
   GVariantBuilder metadata_builder;
   gboolean metadata_builder_initialized = FALSE;
   gboolean skip_commit = FALSE;
+  gboolean in_transaction = FALSE;
 
   context = g_option_context_new ("[ARG] - Commit a new revision");
   g_option_context_add_main_entries (context, options, NULL);
@@ -180,6 +181,8 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GError **error)
   if (!ostree_repo_prepare_transaction (repo, cancellable, error))
     goto out;
 
+  in_transaction = TRUE;
+
   mtree = ostree_mutable_tree_new ();
 
   if (argc == 1 && (trees == NULL || trees[0] == NULL))
@@ -282,6 +285,8 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GError **error)
 
       if (!ostree_repo_commit_transaction (repo, cancellable, error))
         goto out;
+
+      in_transaction = FALSE;
       
       if (!ostree_repo_write_ref (repo, NULL, branch, commit_checksum, error))
         goto out;
@@ -293,11 +298,17 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GError **error)
       if (!ostree_repo_abort_transaction (repo, cancellable, error))
         goto out;
 
+      in_transaction = FALSE;
+
       g_print ("%s\n", parent);
     }
 
   ret = TRUE;
  out:
+  if (in_transaction)
+    {
+      (void) ostree_repo_abort_transaction (repo, cancellable, NULL);
+    }
   if (metadata_builder_initialized)
     g_variant_builder_clear (&metadata_builder);
   g_clear_object (&arg);
index 15e1bb8831fc5c5e93de29fac985fc0b3e06651c..3fc18b360fa2d9a2ee17e912c12ac347ddc37732 100644 (file)
@@ -94,6 +94,7 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error)
   GFile *metadata_f = NULL;
   OstreeMutableTree *mtree = NULL;
   gboolean skip_commit = FALSE;
+  gboolean in_transaction = FALSE;
   int i;
 
   context = g_option_context_new ("BRANCH1 BRANCH2 ... - Merge multiple commits into a single commit tree");
@@ -136,6 +137,8 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error)
   if (!ostree_repo_prepare_transaction (repo, cancellable, error))
     goto out;
 
+  in_transaction = TRUE;
+
   mtree = ostree_mutable_tree_new ();
 
   if (recompose)
@@ -224,6 +227,8 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error)
       if (!ostree_repo_commit_transaction (repo, cancellable, error))
         goto out;
 
+      in_transaction = FALSE;
+
       if (!ostree_repo_write_ref (repo, NULL, branch, commit_checksum, error))
         goto out;
     }
@@ -231,6 +236,8 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error)
     {
       if (!ostree_repo_abort_transaction (repo, cancellable, error))
         goto out;
+
+      in_transaction = FALSE;
       
       g_print ("%s\n", parent);
     }
@@ -238,6 +245,11 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error)
   ret = TRUE;
   g_print ("%s\n", commit_checksum);
  out:
+  if (in_transaction)
+    {
+      (void) ostree_repo_abort_transaction (repo, cancellable, NULL);
+    }
+
   if (compose_metadata_builder_initialized)
     g_variant_builder_clear (&compose_metadata_builder);
   if (commit_metadata_builder_initialized)